package cn.iocoder.yudao.module.system.dal.dataobject.passengerinfo;

import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 乘客信息 DO - 包含完整的用户信息和乘客扩展信息（通过联表查询获得）
 * 注意：这个类用于联表查询结果映射，不直接对应单一数据库表
 *
 * @author 芋道源码
 */
@TableName("system_passenger_info") // 乘客信息表
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
public class PassengerInfoDO extends AdminUserDO {

    /**
     * 乘客信息表的主键ID
     */
    @TableField("id")
    private Integer passengerInfoId;

    /**
     * 关联的用户ID（对应system_users表的id）
     */
    @TableField("user_id")
    private Long userId;
    /**
     * 空闲时间
     */
    private LocalDateTime freeTime;
    /**
     * 可开发票金额
     */
    private BigDecimal yesInvoice;
    /**
     * 行程未开票金额
     */
    private BigDecimal noInvoice;
    /**
     * 用户级别
     */
    private String level;
    /**
     * 成长值
     */
    private Integer growthValue;
    /**
     * 总出行公里数
     */
    private BigDecimal kilometersAll;
    /**
     * 本月出行里程
     */
    private BigDecimal kilometersMonth;
    /**
     * 总充值金额
     */
    private BigDecimal totalMoney;
    /**
     * 退款金额
     */
    private BigDecimal refundMoney;
    /**
     * 总订单支付金额
     */
    private BigDecimal payMoneyAll;
    /**
     * 本月订单支付金额
     */
    private BigDecimal payMoneyMonty;

    // ========== 为了与前端VO字段匹配，提供字段属性和getter/setter方法 ==========
    
    /**
     * 真实姓名（别名字段，映射到nickname）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private String realName;
    
    /**
     * 用户级别（别名字段，映射到level）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private String userLevel;
    
    /**
     * 总出行公里数（别名字段，映射到kilometersAll）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private BigDecimal totalKilometers;
    
    /**
     * 本月出行里程（别名字段，映射到kilometersMonth）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private BigDecimal monthlyKilometers;
    
    /**
     * 总充值金额（别名字段，映射到totalMoney）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private BigDecimal totalRechargeAmount;
    
    /**
     * 退款金额（别名字段，映射到refundMoney）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private BigDecimal refundAmount;
    
    /**
     * 总订单支付金额（别名字段，映射到payMoneyAll）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private BigDecimal totalPayAmount;
    
    /**
     * 本月订单支付金额（别名字段，映射到payMoneyMonty）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private BigDecimal monthlyPayAmount;
    
    /**
     * 可开发票金额（别名字段，映射到yesInvoice）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private BigDecimal invoiceableAmount;
    
    /**
     * 行程未开票金额（别名字段，映射到noInvoice）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private BigDecimal unInvoicedAmount;
    
    /**
     * 认证失败原因（当前数据库没有此字段）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private String verifyFailReason;
    
    /**
     * 最近下单时间（当前数据库没有此字段）
     */
    @TableField(exist = false)  // 这不是数据库字段
    private LocalDateTime lastOrderTime;

}
